#include "Const.h"
#include "UserListView.h"

/**
 * 构造方法。
 * @param parent    父窗口
 */
UserListView::UserListView(QWidget* parent): 
    QListWidget(parent) {
}

/**
 * 添加一个表项。
 * @param itemText  表项文字
 * @param iconIndex 图标索引
 * @param colorful  彩色则为 true，灰色则为 false
 */
void UserListView::addItem(const char* itemText, int iconIndex, bool colorful) {
    // 添加彩色图标
    QString iconFilePath = QString(Const::ICON_FILE_PATH).arg(iconIndex, 2, 10, QLatin1Char('0'));
    QIcon normalIcon(iconFilePath);
    mNormalIconList.append(normalIcon);

    // 添加灰色图标
    QPixmap pixmap(iconFilePath);
    QSize size(pixmap.width(), pixmap.height());
    pixmap = normalIcon.pixmap(size, QIcon::Disabled, QIcon::Off);
    QIcon grayIcon(pixmap);
    mGrayIconList.append(grayIcon);

    // 添加表项
    QListWidgetItem* item = nullptr;
    if (colorful) {
        item = new QListWidgetItem(normalIcon, itemText);
    } else {
        item = new QListWidgetItem(grayIcon, itemText);
    }
    QListWidget::addItem(item);
}

/**
 * 改变某个表项的图标颜色。
 * @param itemText  表项的文字
 * @param colorful  彩色则为 true，灰色则为 false
 */
void UserListView::changeItemColor(const char* itemText, bool colorful) {
    // 查找表项
    QList<QListWidgetItem*> itemList = QListWidget::findItems(itemText, Qt::MatchFixedString);
    if (itemList.isEmpty()) {
        return;
    }

    // 删除表项
    QListWidgetItem* item = itemList.at(0);
    int itemIndex = QListWidget::row(item);
    delete item;

    // 重新创建表项
    if (colorful) {
        item = new QListWidgetItem(mNormalIconList[itemIndex], itemText);
    } else {
        item = new QListWidgetItem(mGrayIconList[itemIndex], itemText);
    }
    QListWidget::insertItem(itemIndex, item);
}

/**
 * 清除所有表项。
 */
void UserListView::clear() {
    const int itemCount = QListWidget::count();
    for (int i = itemCount - 1; i >= 0; i--) {
        delete QListWidget::item(i);
    }
    mGrayIconList.clear();
    mNormalIconList.clear();
    QListWidget::clear();
}
